/*
 * @Date: 2024-08-21 14:15:31
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2025-01-14 20:21:35
 * @Description: 表格项目一户式穿透配置
 */
import { VXETable } from 'vxe-table'
import { FormYhs } from '@fp/config/form-pojo.js'

import { storeToRefs } from 'pinia';
import { useSystemStore, useSettingStore } from '@/stores/modules'


/**
 * 获取一户式连接内容
 * 
 * @param {Object} params {
 *  proId: 项目ID,
 *  proName: 项目名称,
 *  applyId: 申报ID,
 *  yhsType: 一户式类型,
 *  yhsMode: 一户式模式,
 *  uploadType: 上传类型
 * }
 */
const getYhsLink = (opts, { row, column }, store) => {
  const { yhsType } = store
  const { yhsMode, uploadType, isModify } = opts
  const proId = row[opts.idKey || 'proId'] || ''
  const proName = row[opts.nameKey || 'proName'] || ''
  if (proName) {
    if (!proId) {
      return proName
    } else {
      // 处理外部调用时
      const { extCallConfig } = storeToRefs(useSystemStore())
      const { callToken, isCall } = extCallConfig.value
      const { origin, pathname } = window.location;
      // 是否开启hash模式
      const preHref = useSettingStore().openWebHash ? `${origin}${pathname}#` : `${origin}`
      // 拼接主要信息
      let finalHref = `${preHref}/proj-yhs?proId=${proId}&type=${yhsType}`
      // 存在外部调用拼接额外的参数
      // if (isCall && callToken) { finalHref = `${finalHref}&sid=${callToken}` }
      // 拼接申报Id
      const applyId = isModify ? '' : row.applyId
      if (applyId) { finalHref = `${finalHref}&applyId=${applyId}` }
      // 拼接一户式环境模式
      if (yhsMode) { finalHref = `${finalHref}&yhsMode=${yhsMode}` }
      // 拼接上传类型
      if (uploadType) { finalHref = `${finalHref}&uploadType=${uploadType}`}
      return [
        <a class='yhs-pro-name' target='_blank' rel='noopener' href={finalHref}>{proName}</a>
      ]
    }
  } else {
    return row[column.field]
  }

  
}

/**
 * 通用项目一户式
 */
VXETable.renderer.add('xmYHS', {
  /**
   * 渲染单元格
   * 
   * @param {Object} renderOpts {
   *  type: 一户式类型
   *  idKey: id的关键字
   *  nameKey: name的关键字
   *  yhsMode: 一户式模式
   *  isModify: 是否变更
   *  uploadType: 上传类型
   * }
   * @param {Object} params {
   *  row: 当前行数据
   * }
   * @returns render
   */
  renderDefault(renderOpts, params) {
    const { row } = params
    // 一户式类型
    let yhsType = renderOpts.type || FormYhs.SP.type
    if (row.bondTypeCode == '1') {
      yhsType = FormYhs.GE.type
    }
    if (renderOpts.isModify) {
      yhsType = FormYhs.BG.type
    }
    
    return getYhsLink(renderOpts, params, { yhsType })
  }
})

// 备选项目一户式
VXETable.renderer.add('stXmYHS', {
  renderDefault(renderOpts, params) {
    return getYhsLink(renderOpts, params, { yhsType: FormYhs.ST.type })
  }
})

// 律师事务所一户式
VXETable.renderer.add('atXmYHS', {
  renderDefault(renderOpts, params) {
    return getYhsLink(renderOpts, params, { yhsType: FormYhs.AT.type })
  }
})

// 律师事务所一户式
VXETable.renderer.add('fdXmYHS', {
  renderDefault(renderOpts, params) {
    return getYhsLink(renderOpts, params, { yhsType: FormYhs.FD.type })
  }
})
